﻿/**
 * @file coverwidgetitemdelegate.cpp
 * @author huangxb
 * @email 18228033207@163.com
 * @date 2024.04.04
 * @license MIT License
 * @brief 覆盖自定义widget视图项所在位置来显示自定义控件.
 * 视图项自定义widget父窗口使用视图viewport()函数返回的widget，
 * 这样视图自绘时也会绘制其子窗口，达到视图项显示自定义widget的效果。
 * 而自定义视图的位置是通过实现自定义委托QStyledItemDelegate，在其
 * paint函数中获取该视图项当前位置，然后对自定义widget使用setGeometry
 * 显示在该位置（相当于盖住了原视图项的内容），达到视图显示自定义控件的功能。
 *
 * @htmlonly
 * <span style="font-weight: bold">History</span>
 * @endhtmlonly
 * Version|Auther|Date|Describe
 * ------|----|------|--------
 * V1.0|huangxb|2024.04.04|创建
 */

/* 自定义头文件 */
#include "coverwidgetitemdelegate.h"
/* 库头文件 */

CCoverWidgetItemDelegate::CCoverWidgetItemDelegate(QObject *parent)
    : QStyledItemDelegate{parent}
{

}

/**
 * @brief 自定义视图项绘制实现.
 * @param[in] painter 被绘制的设备
 * @param[in] option 绘制选项
 * @param[in] index 当前视图项的索引
 * @see QStyledItemDelegate#paint
 */
void CCoverWidgetItemDelegate::paint(QPainter */*painter*/, const QStyleOptionViewItem &/*option*/, const QModelIndex &/*index*/) const
{
    // if(!m_pCallback)
    // {
    //     QStyledItemDelegate::paint(painter, option, index);
    //     return;
    // }

    // auto pWidget = m_pCallback->GetViewItemWidget(index);
    // auto rc = m_pCallback->PrepareViewItemWidgetRect(index, pWidget, option.rect);

    // QBrush brush;
    // if(m_pCallback->GetViewItemBackgroundBrush(index, brush))
    // {
    //     painter->fillRect(option.rect, brush);
    // }

    // if(m_pCallback->IsUseViewItemBaseStyle(index))
    // {
    //     QStyleOptionViewItem op;
    //     op.rect = option.rect;
    //     op.backgroundBrush = option.backgroundBrush;
    //     QStyle* style = option.widget ? option.widget->style() : QApplication::style();
    //     style->drawControl(QStyle::CE_ItemViewItem, &option, painter);
    // }
    // else
    // {
    //     QStyledItemDelegate::paint(painter, option, index);
    // }

    // if(pWidget)
    // {
    //     pWidget->show();
    //     pWidget->setGeometry(rc);
    // }
}
